<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Integer 整型</title>
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-base.css" />
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-medium.css" />

 </head>
 <body class="docs"><div class="navbar navbar-fixed-top">
  <div class="navbar-inner clearfix">
    <ul class="nav" style="width: 100%">
      <li style="float: left;"><a href="language.types.boolean.html">« Boolean 布尔类型</a></li>
      <li style="float: right;"><a href="language.types.float.html">Float 浮点型 »</a></li>
    </ul>
  </div>
</div>
<div id="breadcrumbs" class="clearfix">
  <ul class="breadcrumbs-container">
    <li><a href="index.html">PHP Manual</a></li>
    <li><a href="language.types.html">类型</a></li>
    <li>Integer 整型</li>
  </ul>
</div>
<div id="layout">
  <div id="layout-content"><div id="language.types.integer" class="sect1">
 <h2 class="title">Integer 整型</h2>
 
 <p class="simpara">
   <span class="type">int</span> 是集合 ℤ = {..., -2, -1, 0, 1, 2, ...} 中的某个数。
 </p>
  
 <div class="sect2">
  <h3 class="title">参见</h3>
  <p class="para">
   <ul class="simplelist">
    <li class="member"><a href="language.types.float.html" class="link">浮点数</a></li>
    <li class="member"><a href="book.bc.html" class="link">任意精度/BCMath</a></li>
    <li class="member"><a href="book.gmp.html" class="link">任意长度整数/GMP</a></li>
   </ul>
  </p>
 </div>

 <div class="sect2" id="language.types.integer.syntax">
  <h3 class="title">语法</h3>

  <p class="simpara">
   整型值 <span class="type">Int</span> 可以使用十进制，十六进制，八进制或二进制表示，前面可以加上可选的符号（- 或者 +）。
   可以用 <a href="language.operators.arithmetic.html" class="link">负运算符</a>
   来表示一个负的<span class="type">int</span>。
  </p>

  <p class="para">
   要使用八进制表达，数字前必须加上 <code class="literal">0</code>（零）。
   PHP 8.1.0 起，八进制表达也可以在前面加上 <code class="literal">0o</code> 或者 <code class="literal">0O</code> 。
   要使用十六进制表达，数字前必须加上
   <code class="literal">0x</code>。要使用二进制表达，数字前必须加上
   <code class="literal">0b</code>。
  </p>

  <p class="para">
   从 PHP 7.4.0
   开始，整型数值可能会包含下划线 (<code class="literal">_</code>)，为了更好的阅读体验，这些下划线在展示的时候，会被 PHP 过滤掉。
  </p>

  <div class="example" id="example-33">
   <p><strong>示例 #1 整数文字表达</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1234</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;十进制数<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0123</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;八进制数&nbsp;(等于十进制&nbsp;83)<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0o123</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;八进制数&nbsp;(PHP&nbsp;8.1.0&nbsp;起)<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0x1A</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;十六进制数&nbsp;(等于十进制&nbsp;26)<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0b11111111</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;二进制数字&nbsp;(等于十进制&nbsp;255)<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1_234_567</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;整型数值&nbsp;(PHP&nbsp;7.4.0&nbsp;以后)<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

  </div>

  <p class="para">
   <span class="type">int</span> literal 的结构形式从 PHP 8.1.0 开始是（之前不允许使用 <code class="literal">0o</code> 或
   <code class="literal">0O</code> 八进制前缀，并且 PHP 7.4.0 之前不允许使用下划线）：
  </p>
 
  <div class="informalexample">
   <div class="example-contents">
<div class="cdata"><pre>
decimal     : [1-9][0-9]*(_[0-9]+)*
            | 0

hexadecimal : 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*

octal       : 0[oO]?[0-7]+(_[0-7]+)*

binary      : 0[bB][01]+(_[01]+)*

integer     : decimal
            | hexadecimal
            | octal
            | binary
</pre></div>
   </div>

  </div>

  <p class="para">
   整型数 <span class="type">int</span> 的字长和平台有关，尽管通常最大值是大约二十亿（32 位有符号）。64
   位平台下的最大值通常是大约 9E18。
   
   PHP 不支持无符号的 <span class="type">int</span>。<span class="type">int</span> 值的字长可以用常量
   <strong><code>PHP_INT_SIZE</code></strong>来表示，
   最大值可以用常量 <strong><code>PHP_INT_MAX</code></strong> 来表示，
   最小值可以用常量 <strong><code>PHP_INT_MIN</code></strong> 表示。
  </p>

 </div>

 <div class="sect2" id="language.types.integer.overflow">
  <h3 class="title">整数溢出</h3>

  <p class="para">
   如果给定的一个数超出了 <span class="type">int</span> 的范围，将会被解释为
   <span class="type">float</span>。同样如果执行的运算结果超出了
   <span class="type">int</span> 范围，也会返回 <span class="type">float</span>。
  </p>

  <div class="example" id="example-34">
   <p><strong>示例 #2 32 位系统下的整数溢出</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$large_number&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">2147483647</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;int(2147483647)<br /><br /></span><span style="color: #0000BB">$large_number&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">2147483648</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;float(2147483648)<br /><br /></span><span style="color: #0000BB">$million&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1000000</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$large_number&nbsp;</span><span style="color: #007700">=&nbsp;&nbsp;</span><span style="color: #0000BB">50000&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$million</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;float(50000000000)<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

  </div>

  <div class="example" id="example-35">
   <p><strong>示例 #3 64 位系统下的整数溢出</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$large_number&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">9223372036854775807</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;int(9223372036854775807)<br /><br /></span><span style="color: #0000BB">$large_number&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">9223372036854775808</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;float(9.2233720368548E+18)<br /><br /></span><span style="color: #0000BB">$million&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1000000</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$large_number&nbsp;</span><span style="color: #007700">=&nbsp;&nbsp;</span><span style="color: #0000BB">50000000000000&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$million</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$large_number</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;float(5.0E+19)<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

  </div>

  <p class="para">
   PHP 没有 <span class="type">int</span> 除法取整运算符，要使用 <span class="function"><a href="function.intdiv.html" class="function">intdiv()</a></span> 实现。
   <code class="literal">1/2</code> 产生出 <span class="type">float</span>
   <code class="literal">0.5</code>。
   值可以舍弃小数部分，强制转换为 <span class="type">int</span>，或者使用
   <span class="function"><a href="function.round.html" class="function">round()</a></span> 函数可以更好地进行四舍五入。
  </p>

  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">25</span><span style="color: #007700">/</span><span style="color: #0000BB">7</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;float(3.5714285714286)&nbsp;<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">((int)&nbsp;(</span><span style="color: #0000BB">25</span><span style="color: #007700">/</span><span style="color: #0000BB">7</span><span style="color: #007700">));&nbsp;</span><span style="color: #FF8000">//&nbsp;int(3)<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">round</span><span style="color: #007700">(</span><span style="color: #0000BB">25</span><span style="color: #007700">/</span><span style="color: #0000BB">7</span><span style="color: #007700">));&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;float(4)&nbsp;<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

  </div>
 </div>

 <div class="sect2" id="language.types.integer.casting">
  <h3 class="title">转换为整型</h3>

  <p class="simpara">
   要明确地将一个值转换为 <span class="type">int</span>，用 <code class="literal">(int)</code> 或
   <code class="literal">(integer)</code> 强制转换。不过大多数情况下都不需要强制转换，因为当运算符，函数或流程控制需要一个
   <span class="type">int</span> 参数时，值会自动转换。还可以通过函数
   <span class="function"><a href="function.intval.html" class="function">intval()</a></span> 来将一个值转换成 <span class="type">int</span> 整型。
  </p>

  <p class="simpara">
   将 <span class="type">resource</span> 转换成 <span class="type">int</span> 时，
   结果会是 PHP 运行时为 <span class="type">resource</span> 分配的唯一资源号。
  </p>

  <p class="simpara">
   参见：<a href="language.types.type-juggling.html" class="link">类型转换的判别</a>。
  </p>
   
  <div class="sect3" id="language.types.integer.casting.from-boolean">
   <h4 class="title">从<a href="language.types.boolean.html" class="link">布尔值</a>转换</h4>

   <p class="simpara">
    <strong><code>false</code></strong> 将产生出 <code class="literal">0</code>（零），<strong><code>true</code></strong> 将产生出
    <code class="literal">1</code>（壹）。
   </p>
  </div>

  <div class="sect3" id="language.types.integer.casting.from-float">
   <h4 class="title">
    从<a href="language.types.float.html" class="link">浮点型</a>转换
   </h4> 

   <p class="simpara">
    当从浮点数 <span class="type">float</span> 转换成整数 <span class="type">int</span>时，将<em class="emphasis">向下</em>取整。自
    PHP 8.1.0 起，当将非整数类型的 <span class="type">float</span> 转换为失去精度的 <span class="type">int</span> 时，会发出弃用通知。
   </p>

   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">):&nbsp;</span><span style="color: #0000BB">int&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">;&nbsp;<br />}<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">8.1</span><span style="color: #007700">));&nbsp;</span><span style="color: #FF8000">//&nbsp;自&nbsp;PHP&nbsp;8.1.0&nbsp;起：“Deprecated:&nbsp;Implicit&nbsp;conversion&nbsp;from&nbsp;float&nbsp;8.1&nbsp;to&nbsp;int&nbsp;loses&nbsp;precision”<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">8.1</span><span style="color: #007700">));&nbsp;</span><span style="color: #FF8000">//&nbsp;PHP&nbsp;8.1.0&nbsp;之前为&nbsp;8<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">8.0</span><span style="color: #007700">));&nbsp;</span><span style="color: #FF8000">//&nbsp;8&nbsp;in&nbsp;both&nbsp;cases<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">((int)</span><span style="color: #0000BB">8.1</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;8&nbsp;in&nbsp;both&nbsp;cases<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">intval</span><span style="color: #007700">(</span><span style="color: #0000BB">8.1</span><span style="color: #007700">));&nbsp;</span><span style="color: #FF8000">//&nbsp;8&nbsp;in&nbsp;both&nbsp;cases<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
   </div>

    
   <p class="para">
    如果浮点数超出了 <span class="type">int</span> 范围（32 位平台下通常为
    <code class="literal">+/- 2.15e+9 = 2^31</code>，64 位平台下，通常为
    <code class="literal">+/- 9.22e+18 = 2^63</code>），则结果为未定义，
    因为没有足够的精度给出一个确切的 <span class="type">int</span> 结果。
    在此情况下没有警告，甚至没有任何通知！
   </p>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     NaN 和 Infinity 在转换成 <span class="type">int</span> 时是零。
    </p>
   </p></blockquote>
    
   <div class="warning"><strong class="warning">警告</strong>
    <p class="para">
     绝不要将未知的分数强制转换为 <span class="type">int</span>，这样有时会导致不可预料的结果。
    </p>

    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo&nbsp;(int)&nbsp;(&nbsp;(</span><span style="color: #0000BB">0.1</span><span style="color: #007700">+</span><span style="color: #0000BB">0.7</span><span style="color: #007700">)&nbsp;*&nbsp;</span><span style="color: #0000BB">10&nbsp;</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;显示&nbsp;7!<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

    </div>
    
    <p class="para">
     参见<a href="language.types.float.html#warn.float-precision" class="link">关于浮点数精度的警告</a>。
    </p>
   </div>
  </div>
   
  <div class="sect3" id="language.types.integer.casting.from-string">
   <h4 class="title">从字符串转换</h4>

   <p class="simpara">
    如果 string 是 <a href="language.types.numeric-strings.html" class="link">numeric</a> 或者前导数字，
    则将它解析为相应的 int 值，否则将转换为零（<code class="literal">0</code>）。
   </p>
  </div>
   
  <div class="sect3" id="language.types.integer.casting-from-null">
   <h4 class="title">从 <span class="type">NULL</span> 转换</h4>

   <p class="simpara">
    <strong><code>null</code></strong> 会转换为零（<code class="literal">0</code>）。
   </p>
  </div>

  <div class="sect3" id="language.types.integer.casting.from-other">
   <h4 class="title">从其它类型转换</h4>

   <div class="caution"><strong class="caution">警告</strong>
    <p class="simpara">
     没有定义从其它类型转换为 <span class="type">int</span> 的行为。
     <em class="emphasis">不要</em>依赖任何现有的行为，因为它会未加通知地改变。
    </p>
   </div>
  </div>

 </div>
</div></div></div></body></html>